/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package bs.tesoreria.modelo;

import bs.global.modelo.Auditoria;
import java.io.Serializable;
import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

/**
 *
 * @author Claudio
 */
@Entity
@Table(name = "cj_cuenta")
public class CuentaTesoreria implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id    
    @NotNull
    @Size(min = 1, max = 6)
    @Column(name = "CODIGO", nullable = false, length = 6)
    private String codigo;
    
    @NotNull
    @Size(min = 1, max = 60)
    @Column(name = "DESCRP", nullable = false, length = 60)
    private String descripcion;
    
    @NotNull
    @Size(min = 1, max = 1)
    @Column(name = "TIPCTA", nullable = false, length = 1)
    private String tipoCuenta;
    
    @Column(name = "NROAUT")
    private Character numeroInternoAutomatico;
    
    @NotNull
    @Size(min = 1, max = 1)
    @Column(name = "EMICHE", nullable = false, length = 1)
    private String emiteCheque;
    
    
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "ULTCHE", precision = 15, scale = 4)
    private BigDecimal numeroUltimoCheque;    

    @JoinColumn(name = "CODBCO", referencedColumnName = "CODIGO", nullable = true, insertable = false, updatable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private Banco banco;
   
    @Lob
    @Size(max = 2147483647)
    @Column(name = "OBSERV", length = 2147483647)
    private String observaciones;
    @Size(max = 6)
    
    @JoinColumn(name = "CODTAR", referencedColumnName = "CODIGO", nullable = true, insertable = false, updatable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private TarjetasDeCredito tarjetaCredito;
    
    @Column(name = "VALDUP")
    private Character validaDuplicidad;
    
    @Embedded
    private Auditoria auditoria;
    
    public CuentaTesoreria() {
    }

    public CuentaTesoreria(String codigo) {
        this.codigo = codigo;
    }

    public CuentaTesoreria(String codigo, String descrp, String Indica, String Emiche) {
        this.codigo = codigo;
        this.descripcion = descrp;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getTipoCuenta() {
        return tipoCuenta;
    }

    public void setTipoCuenta(String tipoCuenta) {
        this.tipoCuenta = tipoCuenta;
    }

    public Character getNumeroInternoAutomatico() {
        return numeroInternoAutomatico;
    }

    public void setNumeroInternoAutomatico(Character numeroInternoAutomatico) {
        this.numeroInternoAutomatico = numeroInternoAutomatico;
    }

    public String getEmiteCheque() {
        return emiteCheque;
    }

    public void setEmiteCheque(String emiteCheque) {
        this.emiteCheque = emiteCheque;
    }

    public BigDecimal getNumeroUltimoCheque() {
        return numeroUltimoCheque;
    }

    public void setNumeroUltimoCheque(BigDecimal numeroUltimoCheque) {
        this.numeroUltimoCheque = numeroUltimoCheque;
    }

    public Banco getBanco() {
        return banco;
    }

    public void setBanco(Banco banco) {
        this.banco = banco;
    }

    public String getObservaciones() {
        return observaciones;
    }

    public void setObservaciones(String observaciones) {
        this.observaciones = observaciones;
    }

    public TarjetasDeCredito getTarjetaCredito() {
        return tarjetaCredito;
    }

    public void setTarjetaCredito(TarjetasDeCredito tarjetaCredito) {
        this.tarjetaCredito = tarjetaCredito;
    }

    public Character getValidaDuplicidad() {
        return validaDuplicidad;
    }

    public void setValidaDuplicidad(Character validaDuplicidad) {
        this.validaDuplicidad = validaDuplicidad;
    }

    public Auditoria getAuditoria() {
        return auditoria;
    }

    public void setAuditoria(Auditoria auditoria) {
        this.auditoria = auditoria;
    }
    
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (codigo != null ? codigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final CuentaTesoreria other = (CuentaTesoreria) obj;
        if ((this.codigo == null) ? (other.codigo != null) : !this.codigo.equals(other.codigo)) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "bs.tesoreria.modelo.CuentaTesoreria[ codigo=" + codigo + " ]";
    }
    
}
